import pylab as PL
import time

def colorDivision(X,Crom,nPattern,nCentr):
	'''
	Ricolora i punti del grafico associando per ogni centroide un colore
	'''
	PL.figure(num=None, figsize=(8, 8), dpi=80, facecolor='c', edgecolor='y')
	PL.title(' CLUSTERED Points ')
	
	punti = range(nCentr)
	x = range(nCentr)
	y = range(nCentr)
	
	for i in range(nCentr):
		x[i] = []
		y[i] = []
	
	 
	for i in range(nCentr):
		for k in range(len(Crom.p2c[i])):
			x[i].append(X[Crom.p2c[i][k]][0])
			y[i].append(X[Crom.p2c[i][k]][1])			
	
	for i in range(nCentr):
		
		punti[i], = PL.plot(x[i],y[i],'o')
	
	PL.draw()
	
def initGraph(pl,X,nDat):
	'''
	Inizializza il grafico 2D
	'''
	### NOTA: per ora solo i dati senza centroidi
	
	### Inizializza vettori locali per il grafico
	x ,y = range(nDat),range(nDat)
	
	### Riempe i vettori locali per il grafico con x e y delle part 
	 
	for i in range(nDat):
		x[i] = X[i][0]
		y[i] = X[i][1]
			
	### definisco il titolo del grafico 
	pl.title(' EA CLUSTERING ')
	 
	### cosi' il grafico viene visualizzato sempre
	pl.ion()
	
	
	punti, = pl.plot(x,y,'o')
	 
	### Definisce gli estremi del grafico
	pl.xlim(0, 8)
	pl.ylim(0, 8)
	pl.draw()

def initCentersGraph(pl,Z,nCentr):
	'''
	Aggiunge i centroidi nel grafico dei punti
	'''
	x ,y = range(nCentr),range(nCentr)
	
	for i in range(nCentr):
		x[i] = Z[i][0]
		y[i] = Z[i][1]
		
	centri, = pl.plot(x,y,'ro')
	pl.draw()
	
	return centri
	
def updateGraph(pl,grCentri,Z,nCentr):
	'''
	Aggiorna la posizione dei centroidi sul grafico
	'''	
	### Inizializza vettori locali per il grafico
	x ,y = range(nCentr),range(nCentr)
	
	### Riempe i vettori locali per il grafico con x e y delle part 
	for i in range(nCentr):
		x[i] = Z[i][0]
		y[i] = Z[i][1]
	
	time.sleep(0.5)
	
	### Aggiorna le posizioni dei punti sul grafico
	grCentri.set_xdata(x)
	grCentri.set_ydata(y)
	
	pl.draw()
	
def plotResult(Y):
	'''
	Grafica l'andamento della fitness massima assoluta
	'''
	pass
	PL.figure(num=None, figsize=(8, 8), dpi=80, facecolor='c', edgecolor='y')
	PL.title(' Fitness massima assoluta ')

	 
	PL.plot(Y)

	PL.draw()
	
	 
